package com.cskaoyan.javase.oop.exercise5;

/**
 * @description: idea的debug模式
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import sun.print.SunMinMaxPage;

/**
 * 会报错：
 *  Non-static field 'start' cannot be referenced from a static context
 *  无法从一个静态的上下文中，引用一个非静态的成员变量
 *  静态上下文：加static的方法
 *  静态成员变量：加static的成员变量
 *
 * 结果是程序死循环：
 * 计算机中整数表示是有符号数
 * Integer.MAX_VALUE的二进制是0111 1111 1111 1111 1111 1111 1111 1111
 * 最大值+1 = 最小值
 * tips：如果大家经常打游戏，如果程序出bug，经常看到-21亿多
 * Integer.MIN_VALUE的二进制是 1000 0000 0000 0000 0000 0000 0000 0000
 * 最小值-1 = 最大值
 *
 * 干说看不清楚：
 * 讲debug模式
 * 第一步：
 * 打断点:就是程序运行停止的地方
 * 一般是直接在main方法中打
 * 第二步：debug模式执行代码
 *
 *
 */
public class Demo4 {
    static int end = Integer.MAX_VALUE; //int类型的最大值。21亿多
    static int start = end - 5;
    

    public static void main(String[] args) {
        /*int count = 0;
        for (int i = start; i <= end; i++)
            count++;
        System.out.println(count);*/

        //如果是long类型呢 最大值+1=最小值
        /*long a = Long.MAX_VALUE;
        long minValue = Long.MIN_VALUE;
        long l = a + 1;
        System.out.println(l==minValue);*/

       /* byte maxValue = Byte.MAX_VALUE;
        int i = maxValue + 1; //这里还会溢出吗
        System.out.println(i);
        byte minValue = Byte.MIN_VALUE;
        System.out.println(minValue);
        //minValue == i
        //System.out.println(maxValue == i);
        //实际上byte最大值+1=最小值 但是由于类型提升了 这里就不溢出了 所以看到的效果是不相等
        byte b = (byte) (maxValue + 1);
        //minValue == b
        System.out.println(minValue == b);*/

        //我再偷袭你一次,如果你还中招,那是你活该
        //char类型的包装类Character
        char maxValue = Character.MAX_VALUE;
        System.out.println(Character.MIN_VALUE == (maxValue + 1)); //这里类型提升了 不会溢出了 所以也是false



    }

    /*public static void main(String[] args) {
        System.out.println(sum(3, 4));
        System.out.println(sum(3, 4));
        System.out.println(sum(3, 4));
        System.out.println(sum(3, 4));
        System.out.println(sum(3, 4));
        System.out.println(sum(3, 4));
    }*/

    //猜测程序会有什么结果
    //1，报错，崩溃 2，5   3，6   4，死循环

    //我们经常写方法
    //这不是方法体？
    public static int sum(int a, int b) {
        test();
        int sum = 0;
        sum = a + b;
        return sum;
    }

    public static void test() {
    }
}
